#ifndef JARVIS_H
#define JARVIS_H

#include "point.h"
#include "math.h"
#include <omp.h>

#define PI 3.141592

//TODO wszystkie klasy implementujące działanie metody mają wspólną klasę bazową
// różnią się tylko wirtualną metodą process

/**
 * Klasa implementująca algorytm Jarvisa znajdowania otoczki wypukłej
 */
class Jarvis
{
public:
    Jarvis();
    ~Jarvis();
    void setPoints(struct Point* _points, int _pointsCount);			// ustawienie punktów
    struct Point* getPoints();
    int getPointsCount();
    struct Point* getEdgesPoints();										// pobranie punktów otoczki
    int getEdgesPoitnsCount();											// pobranie liczby punktów otoczki
    virtual int process();												// rozpoczęcie działania algorytmu
    void clear();														// wyczyszczenie punktów
	void loadEdgesPoints(int count, struct Point* points);				// załadowanie punktó wczytanych z pliku
protected:
    virtual float angle(struct Point p1, struct Point p2, struct Point p3);		// obliczenie kąta pomiędzy trzema punktami
protected:
    struct Point* points;												// punkty
    int pointCount;														// liczba punktów
    struct Point* edgePoints;											// kolejne punkty należące do otoczki
    int edgePointsCount;												// liczba punktów należących do otoczki
};

#endif // JARVIS_H
